import hilog from '@ohos.hilog';

/**
 * Log level
 */
let LogLevel = {
    /**
     * debug
     */
    DEBUG: 3,

    /**
     * info
     */
    INFO: 4,

    /**
     * warn
     */
    WARN: 5,

    /**
     * error
     */
    ERROR: 6,

    /**
     * fatal
     */
    FATAL: 7,
};

const LOG_LEVEL = LogLevel.DEBUG
const domain: number = 0x2048
const projectName: string = '2048_'

/**
 *  log package tool class
 */
export class LogUtil {
    /**
     * 详细的流程记录，通过该级别的日志可以更详细地分析业务流程和定位分析问题。
     */
    debug(tag, format, ...args: any[]): void {
        if (LogLevel.DEBUG >= LOG_LEVEL) {
            hilog.debug(domain, `${projectName}${tag}`, format, args);
        }
    }

    /**
     * 用于记录业务关键流程节点，可以还原业务的主要运行过程；
     * 用于记录可预料的非正常情况信息，如无网络信号、登录失败等。
     * 这些日志都应该由该业务内处于支配地位的模块来记录，避免在多个被调用的模块或低级函数中重复记录。
     */
    info(tag, format, ...args: any[]): void {
        if (LogLevel.INFO >= LOG_LEVEL) {
            hilog.info(domain, `${projectName}${tag}`, format, args);
        }
    }

    /**
     * 用于记录较为严重的非预期情况，但是对用户影响不大，应用可以自动恢复或通过简单的操作就可以恢复的问题。
     */
    warn(tag, format, ...args: any[]): void {
        if (LogLevel.WARN >= LOG_LEVEL) {
            hilog.warn(domain, `${projectName}${tag}`, format, args);
        }
    }

    /**
     * 应用发生了错误，该错误会影响功能的正常运行或用户的正常使用，可以恢复但恢复代价较高，如重置数据等。
     */
    error(tag, format, ...args: any[]): void {
        if (LogLevel.ERROR >= LOG_LEVEL) {
            hilog.error(domain, `${projectName}${tag}`, format, args);
        }
    }

    /**
     * 重大致命异常，表明应用即将崩溃，故障无法恢复。
     */
    fatal(tag, format, ...args: any[]): void {
        if (LogLevel.FATAL >= LOG_LEVEL) {
            hilog.fatal(domain, `${projectName}${tag}`, format, args);
        }
    }
}

let mLogUtil = new LogUtil();

export default mLogUtil as LogUtil
